#include<iostream>
#include<unistd.h>
#include<pthread.h>

using namespace std;

string to_hex(pthread_t tid)
{
    char hex[64];
    snprintf(hex,sizeof(hex),"%p",tid);

    return hex;
}

void* func(void* arg)
{
    const char* name=static_cast<const char*> (arg);
    while(1)
    {
        cout<<"name:"<<name<<" tid:"<<to_hex(pthread_self())<<endl;
        sleep(1);
    }

    return nullptr;
}


int main()
{
    pthread_t tid;
    pthread_create(&tid,nullptr,func,(void*)"thread-1");

    printf("main thread,new thread id:%p\n",tid);

    pthread_join(tid,nullptr);

    return 0;
}

// int main()
// {
//     cout<<"void:"<<sizeof(void)<<endl;
//     cout<<"void*:"<<sizeof(void*)<<endl;
//     return 0;
// }

// int val=100;

// void* routine(void*arg)
// {
//     const char*name=(char*)arg;
//     int cnt=5;
//     while(1)
//     {
//         printf("name:%s,pthread pid:%d val:%d &val:%p\n",name,getpid(),val,&val);
//         //cout<<"new pthread:"<<getpid()<<endl;
//         cnt--;
//         if(cnt==0)
//         {
//             break;
//         }
//         sleep(1);
//     }

//     pthread_exit((void*)100);

//     // int a=1;
//     // int*p=&a;
//     // cout<<"p:"<<p<<endl;
//     // return (void*)p;
// }

// int main()
// {
//     PTHREAD_CANCELED;
//     pthread_t tid;
//     pthread_create(&tid,nullptr,routine,(void*)"thread-1");
//     sleep(1);
//     pthread_cancel(tid);

//     // while(1)
//     // {
//     //     printf("main pthread pid:%d val:%d &val:%p,tid:%p\n",getpid(),val,&val,tid);
//     //     //cout<<"main pthread:"<<getpid()<<endl;
//     //     sleep(1);
//     //     val++;
//     // }

//     void*ret;
//     pthread_join(tid,&ret);
//     //sleep(5);
//     cout<<"main quit... ret::"<<(long long int)ret<<endl;//因为在64位机器下，指针为8字节，所以不能强转为（int4字节）
//     //printf("ret:%d\n",ret);
//     return 0;
// }